(define (domain ferry-strips)
  (:requirements :strips)

  (:constants ferry)
  (:predicates (at ?x ?y)
	       (place ?x)
	       (auto ?x)
	       (at-ferry ?x)
	       (empty-ferry)
	       (on ?x ?y)
	       (ferryless ?x))

  (:action board
	     :parameters (?x ?y)
	     :precondition (and (at ?x ?y)
				 (place ?y)
				 (auto ?x)
				 (at-ferry ?y)
				 (empty-ferry))
	     :effect (and (on ?x ferry)
			   (not (at ?x ?y))
			   (not (empty-ferry))))
  (:action sail
	     :parameters (?x ?y)
	     :precondition (and (at-ferry ?x)
				 (place ?x)
				 (place ?y)
				 (ferryless ?y))
	     :effect (and (at-ferry ?y)
			  (ferryless ?x)
			   (not (at-ferry ?x))))
  (:action debark
	     :parameters (?x ?y)
	     :precondition (and (on ?x ferry)
				 (auto ?x)
				 (place ?y)
				 (at-ferry ?y))
	     :effect (and (not (on ?x ferry))
			   (at ?x ?y)
			   (empty-ferry))))
